package collection.map;

import java.util.LinkedHashMap;

/**
 * @author weim
 * @date 18-8-27
 *
 * 相比于 HashMap
 * 多了个accessOrder 默认false
 * false，所有的Entry按照插入的顺序排列
 * true，所有的Entry按照访问的顺序排列
 * get()方法中afterNodeAccess()
 *
 * 底层  数组+链表
 *
 * 非线程安全
 *
 * 扩容原理 resize()  当容量达到 map的大小和扩容因子的乘积时，就会进行扩容
 * 扩容为两倍 newThr = oldThr << 1;
 * 新创建Node<K,V>[] newTab = (Node<K,V>[])new Node[newCap]; 赋值
 */
public class MyLinkedHashMap {

    public static void main(String[] args) {

        //默认大小 16 扩容因子16×0.75f  可以指定  默认不排序
        LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();

        map.put("a","avalue");
        map.put("b","bvalue");
        map.put("f","fvalue");
        map.put("e","evalue");
        map.put("d","dvalue");
        map.put("c","cvalue");
        map.put(null,null);

        map.get("d");

        System.out.println(map.toString());

        //所有的Entry按照访问的顺序排列  访问到的放在最后
        LinkedHashMap<String, String> map2 = new LinkedHashMap<String, String>(16,0.75f,true);

        map2.put("a","avalue");
        map2.put("b","bvalue");
        map2.put("f","fvalue");
        map2.put("e","evalue");
        map2.put("d","dvalue");
        map2.put("c","cvalue");

        map2.get("d");

        System.out.println(map2.toString());
    }

}
